<?php
/**
 * redis函数库文件
 *
 * @version $Id: redis.php 2036 2014-06-13 12:12:58Z  $
 */

namespace myredis;

use think\facade\Env;

/**
 * 对redis数据库写入1条记录
 * @param $key    名字
 * @param $value   数据
 * @param $expire  有效期
 * @param $index   数据库编号
 */
function redis_set($key, $value, $expire = 3600, $index = 0)
{
    redis_database::getInstance($index)->set($key, $value, $expire); 
}

/**
 * 从redis数据库中读取一个值
 * @param $key  名字
 * @param $index   数据库编号
 */
function redis_get($key, $index = 0)
{
    return redis_database::getInstance($index)->get($key); 
}

/**
 * 从redis数据库删除一个值
 * @param $key  名字
 * @param $index   数据库编号
 */
function redis_del($key, $index = 0)
{
    redis_database::getInstance($index)->delete($key); 
}

/**
 * 清空当前数据库
 * @param $index   数据库编号
 */
function redis_flush($index = 0)
{
    redis_database::getInstance($index)->flush();  
}

/**
 * push一个数据到redis中
 * @param $index   数据库编号
 */
function redis_push($key, $value, $index = 0)
{
    redis_database::getInstance($index)->push($key, $value);  
}

/**
 * 从redis中pop一个数据
 * @param $index   数据库编号
 */
function redis_pop($key, $index = 0)
{
    return redis_database::getInstance($index)->pop($key);  
}

/**
 * 从redis中incr一个key
 * @param $index   数据库编号
 */
function redis_incr($key, $index = 0)
{
    return redis_database::getInstance($index)->incr($key);
}

/**
 * 获取某个key的ttl
 */
function redis_ttl($key, $index = 0)
{
    return redis_database::getInstance($index)->ttl($key);
}

/**
 * 设置某个key的过期时间
 */
function redis_expire($key,$expire,$index = 0)
{
    redis_database::getInstance($index)->expire($key,$expire);
}

/**
 * redis数据库操作类
 */
class redis_database
{
    /**
     * redis链接句柄
     * @var type 
     */
    private $connect = null;
    
    /**
     * 当前redis操作对象
     * @var type 
     */
    private static $_instance = array();
    
    /**
     * 私有构造函数，控制对象数量
     */
    private function __construct($index = 0) 
    {
        if (empty($this->connect)) 
        {
            $host = Env::get('redis.host', '127.0.0.1');
            $port = Env::get('redis.port', '6379');
            $password =  Env::get('redis.password','');
            $index =  Env::get('redis.select',0);
            $this->connect = new \Redis();
            $this->connect->pconnect($host, $port);
            $this->connect->auth($password);
            $this->connect->select($index); 
        }
    }
    
    /**
     * 获取redis操作对象
     */
    public static function getInstance($index = 0) 
    {
        if (!isset(self::$_instance[$index]) || empty(self::$_instance[$index])) self::$_instance[$index] = new redis_database($index);
        return self::$_instance[$index]; 
    }
    
    /**
     * 写入数据
     * @param $key    名字
     * @param $value   数据
     * @param $expire  有效期
     */
    public function set($key, $value, $expire)
    {
        return $this->connect->setex($key, $expire, $value);
    }
    
    /**
     * 获取某个数据
     */
    public function get($key)
    {
        return $this->connect->get($key); 
    }
    
    /**
     * 删除某个数据
     * @param type $key
     */
    public function delete($key)
    {
        $this->connect->del($key);
    }
    
    /**
     * 清空当前数据库
     */
    public function flush()
    {
        $this->connect->flushDB(); 
    }
    
    /**
     * push数据
     */
    public function push($key, $value)
    {
        $this->connect->rPush($key, $value); 
    }
    
    /**
     * pop数据
     */
    public function pop($key)
    {
        return $this->connect->lPop($key); 
    }

    /**
     * incr某个key
     */
    public function incr($key)
    {
        $this->connect->incr($key);
    }

    /**
     * 获取某个key的ttl
     */
    public function ttl($key)
    {
        return $this->connect->ttl($key);
    }

    /**
     * 设置某个key的过期时间
     */
    public function expire($key,$expire)
    {
        $this->connect->expire($key,$expire);
    }

}


